草庐IT

c++ - vector::erase 和 reverse_iterator

全部标签

c++ - vector 的 vector 作为高效的数据结构; std::vector<std::vector<someType>> 的替代品

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我正在寻找可以在一个vector中存储多个vector而不会出现碎片或任何性能问题的数据结构。现在做这个std::vector>myMultiVector;会有所帮助,但据我所知,内存会变得碎片化,因为myMultiVector中的每个vector显然不会位于连续空间中,因为它的分配方案。这不适用于创建我从一开始就知道维度或大小的数组。各个方向的尺寸都是动态的。我想要的是那种结构,其中分配的大小是连续的。

c++ - 如何将流cin加载到 vector 中

我想从cin加载一个包含整数的vector。以下代码有效:std::istream_iteratoriterBegin(std::cin),iterEnd;vectorv(iterBegin,iterEnd);但是,当我尝试更简洁地编写它时,它失败了:vectorv(std::istream_iterator(std::cin),std::istream_iterator());有什么想法吗? 最佳答案 正如IgorTandetnik所指出的,您遇到了C++最令人烦恼的解析。解决方案(如果您的编译器理解C++11)是使用统一的初始化

C++11 对模板参数类型的 vector 使用迭代器

这个问题在这里已经有了答案:WhereandwhydoIhavetoputthe"template"and"typename"keywords?(8个答案)关闭6年前。我有一个模板类,其中包含作为模板参数给出的类型的指针vector。我希望能够使用基于范围的迭代来迭代vector的有限部分。我的类包含以下功能:templateclassObjectList{...public://!Beginiterationoveralistofobjectsstd::vector::iteratorbegin();//!Iteratortoonepasttheendofthelistofobjec

C++ Std 队列和 vector 性能

我最近一直在处理图形,我正在研究从图形返回路径。该路径需要作为包含所有节点的标准vector返回,其中起始节点在前。我一直在寻找两种选择:-使用slowvectorinsert方法在vector前面添加节点-使用双端队列将节点添加到前端(push_front),这样速度更快。然后使用std::copy将双端队列复制到vector与另一种方法相比,使用一种方法是否有显着的性能提升? 最佳答案 由于您要返回一条路径,因此您可能对其长度有一个上限。因此,您可以调用创建一个vector,调用reserve之后(如@user2079303所写

C++ - 高效计算 vector 矩阵乘积

我需要尽可能高效地计算乘积vector矩阵。具体来说,给定一个vectors和一个矩阵A,我需要计算s*A。我有一个Vector类,它包装了一个std::vector和一个Matrix类,它也包装了一个std::vector(为了效率)。天真的方法(我现在正在使用的方法)是有类似的东西VectortimesMatrix(Matrix&matrix){Vectorresult(matrix.columns());//constructorthatdoesaresizeontheunderlyingstd::vectorfor(unsignedinti=0;i它工作正常,耗时将近12000

c++ - 结构和位域成员排序

这个问题在这里已经有了答案:Doclass/structmembersalwaysgetcreatedinmemoryintheordertheyweredeclared?(6个答案)关闭6年前。a)结构b)位域中成员的顺序是否有保证?换句话说,给定一个结构或位域的某个成员,我是否保证它从结构/位域开始的偏移量不小于它前面的成员的大小之和?举个例子:structS{chara[N];unsignedb:M;charc:O;};c的偏移量是否至少为sizeof(a)+sizeof(b)?

c++ - 矩阵 vector 乘法优化 - 缓存大小

这个问题是关于C++优化技术的。我有一个大尺寸的矩阵vector乘法,想减少运行时间。我知道有专门的线性代数库,但我实际上想了解一下底层处理器的特性。到目前为止,我正在使用\O2(Microsoft)进行编译,并让编译器确认乘法的内部循环是矢量化的。示例代码是:#include#include#include#defineVEC_LENGTH64#defineITERATIONS4000000voidgen_vector_matrix_multiplication(double*vec_result,double*vec_a,double*matrix_B,unsignedintcol

c++ - 使用 boost::spirit::x3 解析为 vector<boost::string_view>

这是我的previousone的后续问题关于boost::spirit::x3和boost::string_view.虽然我可以解析成std::vector(liveexample),解析为std::vector失败并出现以下编译错误:#include#include#includenamespaceboost{namespacespirit{namespacex3{namespacetraits{templatevoidmove_to(Itb,Ite,boost::string_view&v){v=boost::string_view(b,std::size_t(std::dista

c++ - 固定大小数组与 alloca(或 VLA)

alloca()何时比通过声明固定大小的数组在堆栈上分配内存更可取?详细信息:众所周知,alloca()是一个有争议的函数。使用不当,会导致堆栈溢出。如果使用得当,它可以通过避免堆分配从紧密循环中缩短几纳秒。在thisquestion关于为什么alloca被认为是不好的,一些HitTest门的答案提倡偶尔使用alloca。另一种从堆栈分配的方法是简单地声明一个固定大小的数组。在HowardHinnant'sstackallocator中的arena类中可以找到此策略的示例。.(该代码当然是C++,但该概念仍然适用于C。)使用alloca与固定大小数组的权衡是什么?什么时候,如果有的话,

c++ - 从 vector 中删除项目时出现 Valgrind 错误

对于你们中的大多数人来说,这可能看起来像是重复的。但是我花了很多时间来解决这个问题。实现了stackoverflow和其他编码站点中给出的许多解决方案。最后我设法修复了它,但我仍然不知道我的旧实现有什么问题。请帮助我找出导致确切错误的原因,查看我的旧代码、新代码、单元测试和valgrind错误。注意:我正在通过单元测试(Google测试框架)测试我的代码。使用C++11编译m_queue_是一个std::vector使用GoogleC++编码标准测试:队列有2个SAPA项目(由新运算符(operator)创建)通过id删除第一个项目(队列现在只有一个)删除唯一的项目由它的id留下第二次